package com.字节流;

import java.io.FileInputStream;
import java.io.IOException;

/*字节流读数据（一次读一个字节数组数据）
*   步骤：
*       1.创建字节输入流对象
*       2.调节读数据方法
*       3.释放资源*/
public class FileInputStreamDemo2 {
    public static void main(String[] args) throws IOException {
        //1.创建字节输入流对象
        FileInputStream fis = new FileInputStream("idea_test\\fos.txt");
        /*//2.调节读数据方法
        byte[] bys = new byte[5];
        int len;
        //第一次读数据
        len = fis.read(bys);
        System.out.println(len);
//        System.out.println(new String(bys)); //字节转字符串
        System.out.println(new String(bys,0,len)); //将有效数据转为字符串
        //第二次读数据
        len = fis.read(bys);
        System.out.println(len);
//        System.out.println(new String(bys));
        System.out.println(new String(bys,0,len)); //将有效数据转为字符串
        //第三次读数据
        len = fis.read(bys);
        System.out.println(len);
//        System.out.println(new String(bys));
        System.out.println(new String(bys,0,len)); //将有效数据转为字符串*/
        /*分析：hello\n
               world\n
        *   第一次读取结果：hello
        *   第二次读取结果：\nworl
                第二次读取了第一行的换行符
            第三次读取结果：
            *           d\r\nrl (rl为第二次读取结果的rl，为被覆盖)
        *
        结论：len不是字节数组的长度，而是实际读取数据的格数
              1--hello  5
              2--\nworl 5
              3-- d\r\n 3
        */

        System.out.println("--------------------");
        //循环改进 循环结束条件仍为-1
        byte[] bys1 = new byte[1024]; //一般给1024及其整数倍
        int len1;
        while((len1 = fis.read(bys1))!=-1){
            System.out.print(new String(bys1,0,len1));
        }
        /*结果：
          hello
          world*/

        //3.释放资源
        fis.close();
    }
}
